#include<stdlib.h>//堆
#include<stdio.h>


int main()
{
    /*
    //申请堆上空间可能会失败，返回空指针
    //需要判断是否为空
    int *p = (int *) malloc(4);//堆上空间的申请
    if(p==NULL)
    {
        printf("malloc 申请空间失败!\n");
        return -1;
    }
    *p=20;
    printf("%d\n",*p);
    free(p);//释放堆上空间，需要一个指针
    printf("%x\n",*p);
    
    申请数组
    int *p=(int *)malloc(sizeof(int)*10);
    if(p==NULL)
    {
        printf("malloc 申请空间失败!\n");
        return -1;
    }
    for(int i=0;i<10;i++)
    {
        p[i]=i+1;
    }
        for(int i=0;i<10;i++)
    {
        printf("%d ",p[i]);
    }
    printf("\n");
    free(p);
*/
    int **p=(int **)malloc(sizeof(int *)*2);
    if(p==NULL)
    {
        printf("malloc 申请空间失败!\n");
        return -1;
    }
    for(int i=0;i<2;i++)
    {
        p[i]=(int *)malloc(sizeof(int *)*3);
        if(p==NULL)
        {
        printf("malloc 申请空间失败!\n");
        return -1;
        }
    }

    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            p[i][j]=i*3+j+1;  //9.30

        }
    }

        for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            printf("%d ",p[i][j]);
        }
        printf("\n");
     }
        for(int i=0;i<2;i++)
        {
            free(p[i]);
        }
        free(p);
        return 0;
    return 0;
}